In [1]:
import pandas as pd
import matplotlib.pyplot as plt
from astropy.stats.circstats import circmean
from functools import reduce
import datetime
import pickle
import time
import plotly.express as px
import numpy as np
import sqlite3

pd.set_option("display.precision", 2)
plt.rcParams.update({'font.size': 20, 'figure.figsize': (8, 4)})

%matplotlib inline
import matplotlib_inline
matplotlib_inline.backend_inline.set_matplotlib_formats('svg')

import seaborn as sns
sns.set()

import warnings
warnings.filterwarnings('ignore')
In [2]:
NIGHT_STUDENT_CODE = 105
MORNING_STUDENT_CODE = 228

connector = sqlite3.connect("../Extras/graphs_data.db")
cursorMorning = connector.cursor()
cursorNight = connector.cursor()

implementing functions to help with graphs printing¶

In [3]:
def print_single_values_graph(Samples):
    #getting heartrate samples from dataframe
    heartrate_samples_dict = pickle.loads(Samples[3])
    heartrate_dict_keys = list(heartrate_samples_dict.keys())
    heartrate_dict_values = list(heartrate_samples_dict.values())
    heartrate_samples_df = pd.DataFrame({'time':heartrate_dict_keys, 'heartrate':heartrate_dict_values})
    #preparing plot title name
    plot_title_name = 'user ID: '+str(Samples[0])+' Date: '+str(Samples[1])+' Type: '+str(Samples[2])
    #creating lineplot
    sns.lineplot(x='time', y='heartrate', data=heartrate_samples_df, color='red')
    plt.title(plot_title_name)
    # configurating axis "x" bins
    plt.xticks(np.arange(0, 25, step=1))
    
    plt.show()

def print_double_values_graph(morning_samples, night_samples):
    #getting heartrate samples from dataframe
    heartrate_morning_samples_dict = pickle.loads(morning_samples[3])
    heartrate_night_samples_dict = pickle.loads(night_samples[3])
    #getting time for axis "x"
    heartrate_morning_dict_keys = list(heartrate_morning_samples_dict.keys())
    heartrate_night_dict_keys = list(heartrate_night_samples_dict.keys())
    #getting heartrate values for axis "y"
    heartrate_morning_dict_values = list(heartrate_morning_samples_dict.values())
    heartrate_night_dict_values = list(heartrate_night_samples_dict.values())
    #building dataframes
    heartrate_morning_samples_df = pd.DataFrame({'time':heartrate_morning_dict_keys, 'heartrate':heartrate_morning_dict_values})
    heartrate_night_samples_df = pd.DataFrame({'time':heartrate_night_dict_keys, 'heartrate':heartrate_night_dict_values})
    #plot title name
    plot_title_name = "Users: ("+str(morning_samples[0])+" vs "+str(night_samples[0])+") Date:"+str(night_samples[1])+" Type: "+night_samples[2]
    
    #creating lineplot
    sns.lineplot(x='time', y='heartrate', data=heartrate_morning_samples_df, color='red')
    sns.lineplot(x='time', y='heartrate', data=heartrate_night_samples_df, color='blue')

    plt.title(plot_title_name)
    
    plt.legend(loc='best', labels=[str(MORNING_STUDENT_CODE)+" (Morning-type)", str(NIGHT_STUDENT_CODE)+" (Night-type)"])
    # configurating axis "x" bins
    plt.xticks(np.arange(0, 25, step=1))
        
    plt.show()

graphs printing function in given dates¶

In [4]:
from datetime import datetime, timedelta

def print_compare_graphs_in_dates(start_date, end_date):
    current_date = start_date
    while current_date <= end_date:
        formatted_date = current_date.strftime('%Y-%m-%d')
        cursorMorning.execute("SELECT * FROM heartrate_graphs_data WHERE id="+str(MORNING_STUDENT_CODE)+" and date='"+formatted_date+"'")
        cursorNight.execute("SELECT * FROM heartrate_graphs_data WHERE id="+str(NIGHT_STUDENT_CODE)+" and date='"+formatted_date+"'")
        morningSamples = cursorMorning.fetchone()
        nightSamples = cursorNight.fetchone()
        if((morningSamples is None) and (nightSamples is None)):
            #both students doesnt have samples in that day, nothing to print
            pass
        elif(morningSamples is None):
            #we have night type student samples at this date, we print them
            print_single_values_graph(nightSamples)
        elif(nightSamples is None):
            print_single_values_graph(morningSamples)
        else:
            #both students has samples, we print a compare graph at this date
            print_double_values_graph(morningSamples, nightSamples)

        current_date += timedelta(days=1)

setting dates and calling printing function to print graphs¶

In [5]:
#setting dates
start_date = datetime(2023, 1, 1)
end_date = datetime(2023, 5, 1)

#calling function to start printing
print_compare_graphs_in_dates(start_date, end_date)
2023-08-28T17:25:54.097094 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:25:54.834024 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:25:55.682015 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:25:56.539457 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:25:57.373197 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:25:58.186048 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:25:59.038936 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:25:59.771631 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:00.551231 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:01.578340 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:02.381222 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:03.203570 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:03.939121 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:04.699898 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:05.584203 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:06.376913 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:07.206493 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:07.784058 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:08.372262 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:09.171310 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:09.829930 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:10.586777 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:11.434777 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:12.173894 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:13.114311 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:13.989974 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:14.942991 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:15.727956 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:16.382752 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:17.177413 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:17.867532 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:18.625562 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:19.414161 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:20.114943 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:20.895106 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:22.024569 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:22.819201 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:23.773061 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:24.452317 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:25.250077 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:26.220647 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:27.044456 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:27.873367 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:28.824523 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:29.489949 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:30.258205 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:31.156065 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:32.018231 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:32.931095 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:33.874687 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:34.631845 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:35.455801 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:36.374463 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:37.298894 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:38.194980 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:38.846261 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:39.635836 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:40.502187 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:41.491812 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:42.284096 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:42.922117 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:43.765599 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:44.451204 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
2023-08-28T17:26:44.968283 image/svg+xml Matplotlib v3.5.2, https://matplotlib.org/
In [ ]: